#leetcode题目72：编辑距离
#难度：困难

#时间复杂度：O(m*n)
#空间复杂度：O(m*n)
#方法：动态规划

from typing import List
class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        m,n=len(word1),len(word2)
        dp=[[0]*(n+1) for _ in range(m+1)]
        for i in range(m+1):
            dp[i][0]=i
        for j in range(n+1):
            dp[0][j]=j
        for i in range(1,m+1):
            for j in range(1,n+1):
                if word1[i-1]==word2[j-1]:
                    dp[i][j]=dp[i-1][j-1]
                else:
                    dp[i][j]=min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1
        return dp[m][n]

#测试数据
word1="horse"
word2="ros"
#预期输出：3
solution=Solution()
print(solution.minDistance(word1,word2))


word1="intention"
word2="execution"
#预期输出：5
solution=Solution()
print(solution.minDistance(word1,word2))
